package com.yiguang.algorithm.dp;

import java.util.Arrays;

import com.alibaba.fastjson.JSON;

/*
 * 8. 递推型DP
 * 957. N 天后的牢房
监狱中 8 间牢房排成一排，每间牢房可能被占用或空置。
每天，无论牢房是被占用或空置，都会根据以下规则进行变更：
如果一间牢房的两个相邻的房间都被占用或都是空的，那么该牢房就会被占用。
否则，它就会被空置。
注意：由于监狱中的牢房排成一行，所以行中的第一个和最后一个牢房不存在两个相邻的房间。

给你一个整数数组 cells ，用于表示牢房的初始状态：如果第 i 间牢房被占用，则 cell[i]==1，否则 cell[i]==0 。另给你一个整数 n 。
请你返回 n 天后监狱的状况（即，按上文描述进行 n 次变更）。
示例 1：

输入：cells = [0,1,0,1,1,0,0,1], n = 7
输出：[0,0,1,1,0,0,0,0]
解释：下表总结了监狱每天的状况：
Day 0: [0, 1, 0, 1, 1, 0, 0, 1]
Day 1: [0, 1, 1, 0, 0, 0, 0, 0]
Day 2: [0, 0, 0, 0, 1, 1, 1, 0]
Day 3: [0, 1, 1, 0, 0, 1, 0, 0]
Day 4: [0, 0, 0, 0, 0, 1, 0, 0]
Day 5: [0, 1, 1, 1, 0, 1, 0, 0]
Day 6: [0, 0, 1, 0, 1, 1, 0, 0]
Day 7: [0, 0, 1, 1, 0, 0, 0, 0]
*/
public class NDayCell {

	public int[] nDayCellStatus(int[] arr, int n)  {
		for(int i=0; i<n; i++) {
			int[] middle = Arrays.copyOf(arr, arr.length);
			if(i==0) {
				if(middle[0]==1) {
					arr[0]=0;
				}
				if(middle[middle.length-1]==1) {
					arr[middle.length-1]=0;
				}
			}
			for(int j=1; j<middle.length-1; j++) {
				if((middle[j-1]==1&&middle[j+1]==1) || (middle[j-1]==0&&middle[j+1]==0)) {
					arr[j]=1;
				}else {
					arr[j]=0;
				}
			}
		}
		return arr;
	}
	
	public static void main(String[] args) {
		int[] arr = {0, 1, 0, 1, 1, 0, 0, 1};
		NDayCell nDayCell = new NDayCell();
		System.out.println(JSON.toJSONString(nDayCell.nDayCellStatus(arr, 6)));
	}
}
